package jsyntaxpane.util.intellisense;

import java.lang.reflect.Member;
import java.util.List;

/**
 * Ferramenta para facilitar a geracao de autocompletes
 * 
 * @author takeshi
 */
public interface AutocompleteTool {

    /**
     * Adiciona uma variavel global - que ficara disponivel em todo o escopo
     * 
     * @param variableType o tipo da variavel
     * @param variable o nome da variavel
     * @param hostType a classe que serve de dono - que fica como dono da variavel
     */
    void addGlobalVariable(Class<?> variableType, String variable, Class<?> hostType);

    /**
     * Adiciona um metodo global
     * 
     * @param signature a assinatura do metodo
     * @param hostType a classe que serve de dono
     */
    void addGlobalMethod(String signature, Class<?> hostType);

    /**
     * Adiciona um statement de "import" quando aplicavel
     * 
     * @param imp {@link String}
     */
    void addImport(String imp);

    /**
     * Procura o token atual
     * 
     * @param text {@link String}
     * @param position int
     * @return {@link String}
     */
    String getCurrentToken(String text, int position);

    /**
     * Devolve a lista de completions para o texto
     * 
     * @param text String
     * @param position int
     * @return {@link List} de {@link Member}
     */
    List<Member> getCompletionFor(String text, int position);

    /**
     * Carrega um script de inicializacao
     * 
     * @param text o texto
     * @param host {@link Class} onde ficar o que for lido
     */
    void loadInitialization(String text, Class<?> host);

}
